import Vue from 'vue'

import logger from "./logger";

import config from '../common/api/config.js'

// APP 和 小程序平台
// #ifdef  APP-PLUS || MP-WEIXIN   
import TIM from 'tim-wx-sdk';
import COS from 'cos-wx-sdk-v5';
// #endif

// #ifdef H5
import TIM from 'tim-js-sdk';
import TIMUploadPlugin from 'tim-upload-plugin'
logger.error(' TUIKit 暂不支持 H5 / web ，请使用者自己完成兼容哦，页面刷新可能会导致报错，需要重新登录 ');
// #endif

// #ifdef APP-PLUS
import Aegis from 'aegis-weex-sdk';
// #endif

// #ifdef MP-WEIXIN
import Aegis from 'aegis-mp-sdk';
// #endif

// #ifdef H5
import Aegis from 'aegis-web-sdk';
// #endif


function onTIMError() {}

function onSDKReady({
	name
}) {
	const app = getApp();
	const isSDKReady = name === uni.$TUIKitEvent.SDK_READY ? true : false
	app.globalData.tim.isSDKReady = isSDKReady;
	if (isSDKReady) {
		const userInfo = app.globalData.user;
		// TODO 更新用户信息
		const profile = {
			nick: userInfo.RealName ? userInfo.RealName : userInfo.UserName,
			avatar: userInfo.HeadIcon ? `${config.domain.staticUrl}${userInfo.HeadIcon}` : '',
			gender: TIM.TYPES.GENDER_UNKNOWN,
			allowType: TIM.TYPES.ALLOW_TYPE_ALLOW_ANY
		}
		uni.$TUIKit
			.updateMyProfile(profile)
			.then(imResponse => {
				// 更新资料成功
				// console.log('onSDKReady | updateMyProfile', imResponse.data);
			})
			.catch(() => {});
	}
}

function onNetStateChange() {}

function onSDKReload() {}

function onSdkNotReady() {}

function onKickedOut() {
	uni.showToast({
		title: '您被踢下线,请重新登录！',
		icon: 'none'
	});
	Vue.prototype.$util.tuiculogout();
}

function onConversationListUpdated(event) {
	// logger.log('TUI-conversation | onConversationListUpdated  |ok', event.data);
	let conversationList = [];
	if (event?.data && event?.data.length > 0) {
		event.data.forEach(item => {
			if (item.type == TIM.TYPES.CONV_C2C) {
				if (item.userProfile.userID !== "@hui#system") {
					conversationList.push({
						...item,
						isOpened: 'none'
					})
				} else {
					conversationList.unshift({
						...item,
						isOpened: 'none'
					})
				}
			}
		});
	}
	Vue.prototype.$store.commit('setconversationList', conversationList)
}
export const timInit = () => {
	const aegis = new Aegis({
		id: 'iHWefAYqKznuxWjLnr', // 项目key 	
		reportApiSpeed: true, // 接口测速
	});
	uni.$aegis = aegis

	uni.$aegis.reportEvent({
		name: 'onLaunch',
		ext1: 'onLaunch-success',
		ext2: 'uniTuikitExternal',
		ext3: config.domain.SDKAPPID,
	})
	// 重点注意： 为了 uni-app 更好地接入使用 tim，快速定位和解决问题，请勿修改 uni.$TUIKit 命名。
	// 如果您已经接入 tim ，请将 uni.tim 修改为 uni.$TUIKit。
	uni.$TUIKit = TIM.create({
		SDKAppID: config.domain.SDKAPPID
	});
	// #ifndef H5
	uni.$TUIKit.registerPlugin({
		'cos-wx-sdk': COS
	});
	// #endif

	// #ifdef H5
	uni.$TUIKit.registerPlugin({
		'tim-upload-plugin': TIMUploadPlugin
	})
	// #endif
	// 如果您已创建了 tim，请将 tim 实例挂载在 wx 上，且不可以修改 wx.$TIM（修改变量可能导致 TUICallKit 组件无法正常使用）, 完成 TUICallKit 初始化，
	// 如果您没有创建，可以不传
	// #ifdef MP-WEIXIN
	wx.$TIM = uni.$TUIKit;
	// #endif
	uni.$TUIKitTIM = TIM;
	uni.$TUIKitEvent = TIM.EVENT;
	uni.$TUIKitVersion = TIM.VERSION;
	uni.$TUIKitTypes = TIM.TYPES;
	// 监听系统级事件
	uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, onSDKReady); //收到离线消息和会话列表同步完毕通知
	uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, onSdkNotReady); // 收到 SDK 进入 not ready 状态通知，此时 SDK 无法正常工作
	uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, onKickedOut); // 收到被踢下线通知
	uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, onTIMError); //收到 SDK 发生错误通知，可以获取错误码和错误信息
	uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, onNetStateChange);
	uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, onSDKReload);
	//收到会话列表更新通知，可通过遍历 event.data 获取会话列表数据并渲染到页面
	uni.$TUIKit.on(uni.$TUIKitEvent.CONVERSATION_LIST_UPDATED, onConversationListUpdated);
}

export const timLogin = () => {
	const app = getApp();
	const isLogin = app.globalData.tim.isLogin;
	if (isLogin)
		return;
	if (app.globalData.user?.UserId) {
		//确保登录了的
		Vue.prototype.$http.huirc.tim_genUserSig({
			expire: 86400
		}).then(res => {
			if (res.Success) {
				const {
					UserId,
					SDKAppID,
					UserSign
				} = res.Result;
				// logger.log(`TUI-login | login  | userSig:${UserSign} userID:${UserId}`);

				// #ifdef  APP-PLUS
				uni.$aegis.reportEvent({
					name: "platform",
					ext1: "platform-APP",
					ext2: "uniTuikitExternal",
					ext3: `${SDKAppID}`,
				});
				// #endif
				// #ifdef MP-WEIXIN
				uni.$aegis.reportEvent({
					name: "platform",
					ext1: "platform-MP-WEIXIN",
					ext2: "uniTuikitExternal",
					ext3: `${SDKAppID}`,
				});
				// #endif
				// #ifdef H5
				uni.$aegis.reportEvent({
					name: "platform",
					ext1: "platform-H5",
					ext2: "uniTuikitExternal",
					ext3: `${SDKAppID}`,
				});
				// #endif

				uni.$TUIKit.login({
					userID: UserId,
					userSig: UserSign
				}).then(inRes => {
					//登录成功
					console.log('tim 登录成功')
					app.globalData.tim.isLogin = true;
					app.globalData.tim.userId = UserId;
					app.globalData.tim.sdkAppId = SDKAppID;
					app.globalData.tim.userSig = UserSign;
					uni.$aegis.reportEvent({
						name: "login",
						ext1: "login-success",
						ext2: "uniTuikitExternal",
						ext3: `${SDKAppID}`,
					});
				}).catch((error) => {
					// console.log('tim 登录异常', error)
					uni.$aegis.reportEvent({
						name: "login",
						ext1: `login-failed#error:${error}`,
						ext2: "uniTuikitExternal",
						ext3: `${SDKAppID}`,
					});
				})
			}
		})
	}
}

//聊天群组是否存在
export const Group = (id) => {
	let data = uni.$TUIKit.searchGroupByID(id).then(function(imResponse) {
		return data = imResponse.data.group
	}).catch(function(imError) {
		return data = false
	});
	return data
}

//申请加入群聊
export const joinGroup = async (groupID) => {
	let data = await uni.$TUIKit.joinGroup({
		groupID: groupID
	}).then(function(imResponse) {

		//加入群聊成功
		return data = imResponse.data.status == TIM.TYPES.JOIN_STATUS_SUCCESS ? true : false
	}).catch(function(imError) {
		return data = false
	});
	return data
}

//退出群聊
export const quitGroup = (groupID) => {
	uni.$TUIKit.quitGroup(groupID).then(function(imResponse) {}).catch(function(imError) {})
}


//收到推送的单聊、群聊、群提示、群系统通知的新消息，可通过遍历 event.data 获取消息列表数据并渲染到页面
export const groupMessageNotification = (groupMessage) => uni.$TUIKit.on(uni.$TUIKitEvent.MESSAGE_RECEIVED,
	groupMessage)




//发送群消息
export const createTextAtMessage = async (to, text) => {
	// 发送群消息
	let message = uni.$TUIKit.createTextAtMessage({
		to: to,
		conversationType: TIM.TYPES.CONV_GROUP,
		payload: {
			text: text
		},
		// v2.18.0起支持群消息已读回执功能，如果您发消息需要已读回执，需购买旗舰版套餐，并且创建消息时将 needReadReceipt 设置为 true
		// needReadReceipt: true
	});
	// 发送消息
	let data = ''
	await uni.$TUIKit.sendMessage(message).then(function(imResponse) {
		// 发送成功
		return data = imResponse.data.message
	})
	return data
}


//获取群信息
export const getGroupProfile = async (groupID) => {
	const index = await uni.$TUIKit.getGroupProfile({
			groupID: groupID
		})
		.then(function(imResponse) {
			console.log(imResponse);
			return imResponse.data.group
		}).catch(function(imError) {
			console.log(imError);
			return ''
		});
	return index
}

//获取群成员
export const getGroupMemberList = async (data) => {
	const index = await uni.$TUIKit.getGroupMemberList(data)
		.then(function(imResponse) {
			return imResponse
		}).catch(function(imError) {
			return ""
		});
	return index
}

export const TIMTYPES = () => TIM.TYPES